package com.sudu.controller;

import com.sudu.dao.TokenUtil;
import com.sudu.domain.User;
import com.sudu.service.UserService;
import com.sudu.tool.MD5;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.*;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

@RestController
@RequestMapping("/registers")
@Api
public class UserRegisterController {

    @Autowired
    private UserService userService ;

    @Autowired
    private MD5 md5 ;

    /**
     * @ ApiOperation 用于注明接口 , value是接口的解释
     * @ ApiParam 注解函数里面的参数，name一般与参数名一致，value是解释，required是是否参数必须。
     */

    @ApiOperation(value = "注册新用户")
    @PostMapping
    public Result save(
            @ApiParam(name = "user" , value = "用户对象" ,required = true )
            @RequestBody User user) {
           if(userService.fineByUsername(user.getUsername()) != null) {
               return new Result(Code.SAVE_ERR , null , "该昵称已被占用 !") ;
           }  else if ( userService.fineByPhone(user.getPhone()) != null )   {
               return new Result(Code.SAVE_ERR , null , "该账户已被占用 !") ;
           }
           else  {
               user.setCreateTime(new Date());
               user.setCardCase("编辑个性签名");
               // 密码加密处理 ： md5 算法
               // 盐值 + password + 盐值===》 整体 md5 算法加密
               String oldPassword = user.getPassword() ;
               // 随机生成盐值
               String salt = UUID.randomUUID().toString().toUpperCase() ;
                // 将密码和盐值进行加密处
               String md5Password = md5.getMD5Password(oldPassword , salt);
               System.out.println(salt);
               System.out.println(md5Password);
               user.setPassword(md5Password);
               user.setSalt(salt);
               user.setCreateTime(new Date());
               boolean flag = userService.saveUser(user) ;
               return new Result(flag ? Code.SAVE_OK : Code.SAVE_ERR , flag) ;

           }


    }




}
